#ifndef BEHAVIOR_H
#define BEHAVIOR_H

#include <Ogre.h>

class BoidBase;

enum BehaviorType
{
	BEHAVIOR_SEEK,
	BEHAVIOR_FLEE,
	BEHAVIOR_PURSUIT,
	BEHAVIOR_EVASION,
	BEHAVIOR_OFFSETPURSUIT,
	BEHAVIOR_ARRIVAL,
	BEHAVIOR_OBSTACLEAVOIDANCE,
	BEHAVIOR_WANDER,
	BEHAVIOR_PATHFOLLOWING,
	BEHAVIOR_FLOWFIELDFOLLOWING,
	BEHAVIOR_COLLISIONAVOIDANCE,
	BEHAVIOR_SEPARATION,
	BEHAVIOR_COHESION,
	BEHAVIOR_ALIGNMENT,
	BEHAVIOR_LEADERFOLLOWING
};

class Behavior
{

protected:
	/// behavior type.
	BehaviorType mType;

public:
	/// weight of behavior.
	float mWeight;

public:
	/// constructor.
	Behavior(BehaviorType type) : mType(type), mWeight(1.0f)
	{}

	/// destructor.
	~Behavior()
	{}

	/// executes behavior.
	virtual Ogre::Vector3 execute(const BoidBase* boid) = 0;
};

#endif // BEHAVIOR_H
